Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

Windows内核

帖子发起人: Thomson   发起时间: 2010-01-29 00:20 上午   回复: 6

Print Search
帖子排序:    
   2010-01-29, 00:20 上午
Thomson 离线,最后访问时间: 2013/3/31 11:42:42 Thomson

发帖数前10位
注册: 2008-07-03
发 贴: 211
Global low level hook 为什么需要inject DLL?
Reply Quote
要注册一个global的键盘和鼠标 low level hook, 为什么一定要把callback写在dll里面,dll又是被怎么inject到其它process里面的呢?
IP 地址: 已记录   报告
   2010-01-29, 14:05 下午
s5689412 离线,最后访问时间: 2015/10/10 9:37:32 sPhinX

发帖数前25位
注册: 2008-06-28
发 贴: 50
Re: Global low level hook 为什么需要inject DLL?
Reply Quote
正好我这两天也在想这个问题,随便乱说一下。

其实你的第二个问题可以算是回答了第一个问题,因为需要能够让callback被回调,就需要让它在目标进程里面,而让callback进入目标进程最简单的办法就是Inject dll,我个人理解理论上来说可以自己写一套机制,来只插入代码到目标进程中,但是系统既然提供dll这种相对简单稳定的机制,自然是拿来用就好。

至于第二个问题,codeproject上一大堆讨论hook,inject的文章,我推荐一篇
Three Ways to Inject Your Code into Another Process,
http://www.codeproject.com/KB/threads/winspy.aspx
其他的你可以自己去搜索一下
IP 地址: 已记录   报告
   2010-01-29, 14:37 下午
Thomson 离线,最后访问时间: 2013/3/31 11:42:42 Thomson

发帖数前10位
注册: 2008-07-03
发 贴: 211
Re: Global low level hook 为什么需要inject DLL?
Reply Quote
谢谢...嗯,有道理.

对于除了keyboard和mouse的low level hook, 其它的hook确实是要inject dll, 我觉得是不是因为其它的message hook都是在处理相应message 前面或者后面触发,所以要把hook procedure所在的dll inject过去.. 但是low level由于是不任何的thread拿到message 前的处理,所以,放在原先注册hook的thread里面处理就行. 所以keyboard和mouse的low level hook是不需要inject dll的.


不知道有没有关于这些hook的实现方面的资料.
IP 地址: 已记录   报告
   2010-01-30, 11:35 上午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: Global low level hook 为什么需要inject DLL?
Reply Quote
上调试器,一切就都清楚了。:-)
从学习的角度看,了解一下各种hook挺好的,但是从软件安全和开发实践的角度来看,hook已经是不鼓励使用的方法了。
IP 地址: 已记录   报告
   2010-01-31, 19:57 下午
MJ0011 离线,最后访问时间: 2009/12/24 22:33:41 MJ0011

发帖数前10位
注册: 2008-04-24
发 贴: 112
Re: Global low level hook 为什么需要inject DLL?
Reply Quote
low level的应是在原始进程context下执行的,不用DLL也可以。
IP 地址: 已记录   报告
   2010-01-31, 21:44 下午
Thomson 离线,最后访问时间: 2013/3/31 11:42:42 Thomson

发帖数前10位
注册: 2008-07-03
发 贴: 211
Re: Global low level hook 为什么需要inject DLL?
Reply Quote
谢谢MJ0011, 如果是在原始的context下面执行的,那么是在哪个地方发message给这个原始线程的呢?RIT里面吗?
IP 地址: 已记录   报告
   2010-02-05, 16:39 下午
lgq198660837 离线,最后访问时间: 2009/12/19 14:35:08 Oak

发帖数前100位
注册: 2009-10-19
发 贴: 14
Re: Global low level hook 为什么需要inject DLL?
Reply Quote
NAT垫,替换原始汇编命令,跳转到你的函数。自己hook差不多就是这个原理。
如果前方没NAT,就把前五个字节命令 move ebp, esp; push ebp; 替换掉。跳到你的函数里。
IP 地址: 已记录   报告
高端调试 » 内核探秘 » Windows内核 » Global low level hook 为什么需要inject DLL?

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.